const http = require("http");
const fs = require("fs");

const so = http.createServer((req,res)=>{
    if(req.url === "/favicon.ico") return; 
    if(req.url.includes("/api")){
        dataReq(req,res)
    }else{
        fileReq(req,res);
    }
})
so.listen(3000,()=>{
    console.log("http://localhost:3000")
})


// 数据处理路由的功能
function dataReq(req,res){
    let str = "";
    req.on("data",data=>{
        str += data;
    })
    req.on("end",()=>{
        let obj = {};
        if(str){
            obj = qs.parse(str);
        }else{
            const m = new URL("http://localhost:3000" + req.url).searchParams;
            for(let i of m){
                obj[i[0]] = i[1];
            }
        }
        // 前端发送的数据
        // console.log(obj);
        switch(obj.type){
            case "getPro":
                // 查询数据库中的数据
                getPro(req, res, obj);
                break;
            case "register":
                register(req, res, obj);
                break;
            case "login":
                login(req, res, obj);
                break;
            case "getDetail":
                getDetail(req, res, obj);
                break;
        }
    });
}

// 获取单个商品详情
function getDetail(req, res, reqData){

    fs.readFile("./data/getPro.json", "utf-8", (err, data)=>{
        const arr = JSON.parse(data).msg.filter(val=>val.proId===reqData.id);
        // console.log(arr);

        const obj = {}
        obj.code = 1;
        obj.title = "获取详情成功";
        obj.data = arr[0];
        // 直接返回前端
        res.write(JSON.stringify(obj));
        res.end();

    })

}


// 登录功能（先读文件，比对用户信息）
function login(req, res, reqData){
    fs.readFile("./data/user.json", "utf-8", (err, data)=>{
        const users = JSON.parse(data);
        let i = 0;
        const flag = users.some((val,idx)=>{
            i = idx;
            return val.username === reqData.username;
        })

        const obj = {};
        if(flag){
            if(users[i].password === reqData.password){
                // 登录成功
                obj.code = 1;
                obj.title = "登录成功";
                obj.data = reqData.username;
            }else{
                // 密码不对
                obj.code = 2;
                obj.title = "登录失败，密码不对";
                obj.data = "NOT DATE";
            }
        }else{
            // 没有找到用户名
            obj.code = 0;
            obj.title = "登录失败，用户名不存在";
            obj.data = "NOT DATE";
        }
        // 直接返回前端
        res.write(JSON.stringify(obj));
        res.end();
    })
}

// 注册功能（先读文件，再写文件）
function register(req, res, reqData){
    fs.readFile("./data/user.json", "utf-8", (err, data)=>{
        const users = JSON.parse(data);
        // 判断是否重名
        const flag = users.some(val=>val.username === reqData.username);
        const obj = {};
        if(flag){
            obj.code = 0;
            obj.title = "注册失败，用户名重名";
            obj.data = "NOT DATE";
            // 直接返回前端
            res.write(JSON.stringify(obj));
            res.end();
        }else{
            users.push({
                username: reqData.username,
                password: reqData.password
            })
            obj.code = 1;
            obj.title = '注册成功';
            obj.data = "NOT DATE";
            // 先将用户数据写入数据库
            fs.writeFile("./data/user.json", JSON.stringify(users), ()=>{
                // 写入数据库之后，再返回前端
                res.write(JSON.stringify(obj));
                res.end();
            })
        }
    })
}

// 查询数据库中 商品数据 的功能
function getPro(req, res, reqData){
    fs.readFile("./data/getPro.json", "utf-8", (err, data)=>{
        const obj = {};
        if(err){
            obj.code = 0;
            obj.title = "读取失败";
            obj.data = [];
        }else{
            obj.code = 1;
            obj.title = '读取成功';
            obj.data = JSON.parse(data);
        }
        res.write(JSON.stringify(obj));
        res.end();
    })
}


function fileReq(req,res){
    const urlObj = new URL("http://localhost:3000" + req.url);
    fs.readFile("./www" + urlObj.pathname, (err,data)=>{
        if(err){
            res.write("404");
        }else{
            res.write(data);
        }
        res.end();
    })
}
